package com.xmutca.sso.dao;

import com.xmutca.core.common.Receipt;
import com.xmutca.core.common.Results;
import com.xmutca.core.mybatis.MyBatisDao;
import com.xmutca.core.mybatis.lang.MybatisExtendedLanguageDriver;
import com.xmutca.sso.api.Menu;
import org.apache.ibatis.annotations.*;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.util.List;
import java.util.Map;

/**
 * @author: 彭伟煌(pengweihuang@xmutca.com)
 * @create: 2016-08-26 17:14
 */
@MyBatisDao
public interface MenuDao {

    /**
     * 插入菜单
     * @param menu
     * @return
     */
    @Options(useGeneratedKeys = true, keyProperty = "id")
    @Insert("insert into t_sys_menu(name, parent, state, create_date, create_time, create_timestamp) values(#{name}, #{parent}, #{state}, curdate(), curtime(), unix_timestamp())")
    int add(Menu menu);

    /**
     * 更新菜单状态
     * @param state
     * @param menuId
     * @return
     */
    @Delete("update t_sys_menu set state = #{state} where id = #{menuId}")
    int updateState(@Param("state") Integer state, @Param("menuId") Integer menuId);

    /**
     * 批量更新菜单状态
     * @param menuIds
     * @return
     */
    @Lang(MybatisExtendedLanguageDriver.class)
    @Delete("update t_sys_menu set state = #{state} where id in (#{menuIds})")
    int batchUpdateState(@Param("state") Integer state, @Param("menuIds") List<Integer> menuIds);

    /**
     * 更新内容中不包含创建日期，时间，时间戳，不包含状态
     * @param menu
     * @return
     */
    @Update("update t_sys_menu set name = #{name}, parent = #{parent}, update_date = curdate(), update_time = curtime(), update_timestamp = unix_timestamp() where id = #{id}")
    int update(Menu menu);

    /**
     * 读取菜单信息
     * @param menuId
     * @return
     */
    @ResultMap("menuFullResultMap")
    @Select("select * from t_sys_menu where id = #{menuId}")
    Menu get(Integer menuId);

    /**
     * 查询数据
     * @param paramMap
     * @return
     */
    List<Menu> query(Map<String, Object> paramMap);

    /**
     * 统计查询数据记录数
     * @param paramMap
     * @return
     */
    int countQuery(Map<String, Object> paramMap);

    /**
     * 查询用户当下所有的菜单
     * @param userId
     * @return
     */
    List<Menu> queryMenus(@Param("userId") String userId);
}
